package main

import (
	"fmt"
	"log"
	"net/http"
	"time"
)

// IndexRequest 索引请求结构
type IndexRequest struct {
	FolderPath   string   `json:"folder_path"`
	FileTypes    []string `json:"file_types"`
	ChunkSize    int      `json:"chunk_size"`
}

// SearchRequest 搜索请求结构
type SearchRequest struct {
	Query     string `json:"query"`
	TopK      int    `json:"top_k"`
	Threshold float64 `json:"threshold"`
}

// SearchResult 搜索结果结构
type SearchResult struct {
	FilePath    string  `json:"file_path"`
	Content     string  `json:"content"`
	Score       float64 `json:"score"`
	LineStart   int     `json:"line_start"`
	LineEnd     int     `json:"line_end"`
	ChunkIndex  int     `json:"chunk_index"`
}

// IndexStatus 索引状态
type IndexStatus struct {
	IsRunning     bool      `json:"is_running"`
	Progress      int       `json:"progress"`
	CurrentFile   string    `json:"current_file"`
	TotalFiles    int       `json:"total_files"`
	ProcessedFiles int      `json:"processed_files"`
	StartTime     time.Time `json:"start_time"`
	Message       string    `json:"message"`
}

var (
	indexStatus = IndexStatus{}
	vectorDB    *VectorDatabase
)

func main() {
	// 初始化向量数据库
	var err error
	vectorDB, err = NewVectorDatabase("./test_vectors.db")
	if err != nil {
		log.Fatal("初始化向量数据库失败:", err)
	}
	defer vectorDB.Close()

	// 设置HTTP路由
	http.HandleFunc("/", handleHome)
	http.HandleFunc("/api/index", handleIndex)
	http.HandleFunc("/api/search", handleSearch)
	http.HandleFunc("/api/status", handleStatus)
	http.HandleFunc("/api/file", handleFileContent)
	http.HandleFunc("/static/", handleStatic)

	fmt.Println("🚀 向量测试工具启动成功!")
	fmt.Println("📱 访问地址: http://localhost:8081")
	fmt.Println("💡 使用说明:")
	fmt.Println("   1. 选择要索引的文件类型")
	fmt.Println("   2. 设置目标文件夹路径")
	fmt.Println("   3. 点击'开始索引'按钮")
	fmt.Println("   4. 在搜索框中输入查询内容")
	fmt.Println("📊 终端将显示详细的处理日志")
	fmt.Println("====================================================")

	log.Fatal(http.ListenAndServe(":8081", nil))
}